/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ua.lviv.franko.matrix.hash.gauss;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.Set;

import ua.lviv.franko.matrix.Hash;
import ua.lviv.franko.matrix.IRow;

/**
 *
 * @author marko
 */
public class HashGauss extends Hash implements IRow

{

      public void setValue(int num, double value){
            // если значение 0-вое, то удаляем данную ячейку
            if (value==0){
                  if (hash.containsKey(num)) hash.remove(num);
                  return;
            }

            // если значение не 0-вое, то перезаписываем или добавляем ячейку
            hash.put(num, value);
      }


      public void addValue(int num, double value){
            if (hash.containsKey(num)) hash.put(num,(double)hash.get(num)+value);
            else hash.put(num, value);
      }

      public double getValue(int num){
            if (hash.containsKey(num)) return (double)hash.get(num);
            return 0;
      }

      public void getValues(int[] indexes, double[] values){
            Set<Integer> keys = hash.keySet();
            int count = keys.size();

            indexes = new int[count];
            values = new double[count];

            int i=0;

            for (Iterator<Integer> it = keys.iterator(); it.hasNext();){ //перевірити !!!!
                  indexes[i] = it.next();
                  values[i] = hash.get(indexes[i]);
                  i++;
            }

      }

      public void getValues(ArrayList<Integer> indexes, ArrayList<Double> values) {
            Set<Integer> keys = hash.keySet();
//          int count = keys.size();

            indexes = new ArrayList<Integer>();
            values = new ArrayList<Double>();

            int i=0;

            for (Iterator<Integer> it = keys.iterator(); it.hasNext();){ //перевірити !!!!
                  indexes.add(it.next());
                  values.add( hash.get(indexes.get(i)));
                  i++;
            }
    }

    public ArrayList<Double> getValues() {
        Set<Integer> keys = hash.keySet();
//          int count = keys.size();

            //indexes = new ArrayList<Integer>();
            ArrayList<Double> values = new ArrayList<Double>();

            for (Iterator<Integer> it = keys.iterator(); it.hasNext();){ //перевірити !!!!
                  values.add( hash.get(it.next()));
            }
        return values;
    }

    public ArrayList<Integer> getIndexes() {
        Set<Integer> keys = hash.keySet();
//          int count = keys.size();

            //indexes = new ArrayList<Integer>();
            ArrayList<Integer> values = new ArrayList<Integer>();

            for (Iterator<Integer> it = keys.iterator(); it.hasNext();){ //перевірити !!!!
                  values.add( (it.next()));
            }
        return values;
    }

}
